home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / dl_serie / updates / 159 / source / fdmproto.h < prev    next >
C/C++ Source or Header  |  1995-11-25  |  5KB  |  113 lines

  1. #ifndef _FDMPROTO_H_
  2. #define _FDMPROTO_H_
  3.  
  4. /*
  5.  * Zur direkten Unterstützung von Freedom gibt es 2 Möglichkeiten, bei 
  6.  * beiden wird in dem Speicherbereich, auf den fs_iinpath beim fsel_[ex]input
  7.  * Aufruf deutet, zusätzlich zum Pfad eine Struktur übergeben.
  8.  * Die Vorgehensweise ist denkbar einfach: Hat man vorher 128 Bytes für den
  9.  * Pfad reservieren müssen, sind es jetzt 128+sizeof(Fdm_Str).
  10.  * In diesen Speicher (um globale Lesbarkeit unter MiNT müssen Sie sich nicht
  11.  * kümmern) wird die folgende Struktur kopiert, direkt dahinter der Pfad-
  12.  * String. Der Pfad wird also nur um sizeof(Fdm_Str) nach hinten verschoben.
  13.  * Dannach können Sie zwei Wege beschreiten:
  14.  *
  15.  * 1. Übergeben Sie einfach einen Zeiger auf diesen Speicherbereich in 
  16.  * fs_iinpath. Durch den Magic am Anfang erkennt Freedom sofort, das der
  17.  * Aufrufer das Protokoll unterstützen will. Diese Methode hat den Nachteil,
  18.  * daß Sie sie für den unwahrscheinlichen Fall, das Freedom nicht installiert
  19.  * ist ;-), nicht anwenden können. Sie müssen also im Cookiejar nachsehen, ob
  20.  * ein FSEL-Cookie mit Version >= 2.00 vorhanden ist (s. SLECTRIC.H)
  21.  *
  22.  * 2. Übergeben Sie einen Zeiger auf den Pfad hinter der Struktur. Das versteht
  23.  * auch jeder andere Fileselektor, Sie brauchen also nicht im Cookie nachzu-
  24.  * sehen, ob Freedom vielleicht nicht installiert ist. Freedom könnte ja nun
  25.  * einfach sizeof(Fdm_Str) vor dem übergebenen Pointer nachsehen, ob der Magic
  26.  * da zufällig steht, gäbe es da nicht MiNT mit aktivem Speicherschutz. Deshalb
  27.  * müssen Sie bei dieser Methode Freedom noch einen Hinweis geben, daß er 
  28.  * gefahrlos auf den Speicher vor dem Pfad zugreifen darf: Findet Freedom 
  29.  * hinter dem Nullbyte des Pfades die vier Zeichen "?Fdm" (dasselbe Magic wie
  30.  * in der Struktur erwartet wird), dann kuckt es vor dem Pfad nach, ob sich die
  31.  * Struktur dort befindet. Und jetzt (Gnade.. .-)): die Struktur:
  32.  */
  33. typedef struct
  34. {
  35.     long magic;   /* '?Fdm' */
  36.     int id;       /* Beliebige Id */
  37.     int maxsel;   /* Maximale Anzahl von zu selektierenden Files */
  38.     struct
  39.     {
  40.         unsigned fullpaths : 1; /* volle Pfadnamen in der Antwort */
  41.         unsigned doquote   : 1; /* Freedom darf quoten */
  42.         unsigned noname    : 1; /* keinen Appl.-Namen vor Titel */
  43.         unsigned sysmodal  : 1; /* System-Modal öffnen (örgs..) */
  44.         unsigned resvd     : 28; /* reserviert (auf 0 setzen) */
  45.  
  46.     } flags;
  47.     int handle;  /* Enthält nach Erfolg das Fensterhandle des 
  48.                     Fileselektors (bzw. 0 bei einem fliegenden 
  49.                     Dialog). Sinn: Das aufrufende Programm kann den 
  50.                     Fileselektor kontrollieren, indem es etwa eine 
  51.                     WIN_CLOSED-Nachricht dafür an Freedom sendet, oder 
  52.                     das Fenster in sein Window-Cycle mit einbezieht.
  53.                   */
  54.     int server;  /* Enthält nach Erfolg die Appl.-Id des 
  55.                     Fileselektor-Servers. An ihn können Nachrichten
  56.                     bzgl. des Fensters 'handle' gesendet werden.
  57.                   */
  58.     char path[0]; /* jetzt kommt der der Pfad.. */
  59.  
  60. } Fdm_Str;
  61.  
  62. /*
  63.  * kehrt fsel_input zurück, und in der Struktur steht im 'magic'
  64.  * dann ein '!Fdm', war der Aufruf erfolgreich, anderenfalls wurde
  65.  * der Aufruf an das OS weitergeleitet, und die Rückgabewerte 
  66.  * (fs_iinpath, fs_iinsel, fs_iexbutton) sind gültig!
  67.  * 
  68.  * Bei erfolgreichem Aufruf kann die Applikation sich einer Antwort 
  69.  * in Form einer AES-Nachricht sicher sein. Ob die Applikation weiterläuft
  70.  * oder in einer Sub-Eventloop auf die Antwort wartet, in der Sie sonst
  71.  * und nur WM_REDRAW und Co. bearbeitet, bleibt ihr überlassen. Am schönsten 
  72.  * wäre natürlich, wenn ein Weiterarbeiten ermöglicht wird.
  73.  *
  74.  * Das Format der AES-Antwort-Nachricht ist:
  75.  *
  76.  * FILE_SELECTED: Ein Fileselektor wurde geschlossen:
  77.  * Word 3:   Id des Fileselektors (wie bei fsel_[ex]input angegeben)
  78.  * Word 4/5: Zeiger auf Pfad und Extension zum Zeitpunkt
  79.  *           des Schließens
  80.  * Word 6/7: Zeiger auf die ausgewählten Files, oder NULL, falls
  81.  *           der Benutzer Abbruch betätigt hat
  82.  *           Die Files sind durch Spaces getrennt, und enthalten
  83.  *           je nach den Angaben beim Aufruf volle Pfade bzw.
  84.  *           auch Quotes ('Chrisker''s Briefbeschwerer')
  85.  */
  86. #ifndef FILE_SELECTED
  87. #define FILE_SELECTED    0x4560
  88. #endif
  89. /*
  90.  * In den dem Empfang dieser Nachricht folgenden 10 Sekunden kann das
  91.  * Programm gefahrlos auf den (MiNT-globalen) Speicher, auf die Wörter
  92.  * 3/4 bzw. 6/7 weisen, zugreifen, und die Daten kopieren. Dannach
  93.  * übergibt Freedom den Speicher wieder an das GEMDOS (Mfree)!
  94.  *
  95.  *
  96.  * Sollen Nachrichten an den Server gesendet werden, sollte man statt der
  97.  * Standard Screenmgr-Nachrichten WM_TOPPED und WM_CLOSED die folgenden
  98.  * Nachrichten-Nummern verwenden. Bei den normalen Nachrichten passiert 
  99.  * nämlich uU was anderes, als man erwartet. Etwa wird der Fileselektor 
  100.  * ICFS-Ikonifiziert, wenn gerade eine Umschalttaste festgehalten wird 
  101.  * (WM_CLOSED), oder es wird stattdessen das Objekt unter der Maus bedient,
  102.  * weil in Freedom die Simulation von Hintergrundbedienung (WM_TOPPED) unter
  103.  * SingelTOS aktiviert ist.
  104.  */  
  105. #ifndef WIN_TOPPED
  106. #define WIN_TOPPED        0x7a22
  107. #endif
  108. #ifndef WIN_CLOSED
  109. #define WIN_CLOSED        0x7a23
  110. #endif
  111.  
  112. #endif /* _FDMPROTO_H_ */
  113.